package com.project.common.web.biz;


import java.io.Serializable;
import java.util.Map;

/**
 * RSA非对称加密服务接口
 */
public interface RSAService extends Serializable {

    /**
     * 生成js密钥并且返回公钥参数【后台登录使用】
     *
     * @param cacheKey redisKey
     * @return
     */
    Map<String, String> generateJsKey(String cacheKey);

    /**
     * 生成js密钥并且返回公钥参数
     *
     * @param cacheKey redisKey
     * @param expire   过期时间，单位：秒
     * @return
     */
    Map<String, String> generateJsKey(String cacheKey, int expire);

    /**
     * 生成密钥并且返回公钥参数【APP接口使用】
     *
     * @param cacheKey redisKey
     * @return
     */
    Map<String, String> generateKey(String cacheKey);

    /**
     * 生成密钥并且返回公钥参数【APP接口使用】
     *
     * @param cacheKey redisKey
     * @param expire   过期时间，单位：秒
     * @return
     */
    Map<String, String> generateKey(String cacheKey, int expire);

    /**
     * 根据私钥缓存KEY移除私钥【APP接口使用】
     *
     * @param cacheKey redisKey
     */
    void removePrivateKey(String cacheKey);

    /**
     * 解密js参数【后台登录使用】
     *
     * @param param
     * @param cacheKey redisKey
     * @return
     */
    String decryptJsParameter(String param, String cacheKey);

    /**
     * 根据私钥缓存KEY RSA解密 加密串【APP接口使用】
     *
     * @param param
     * @param cacheKey redisKey
     * @return
     */
    String decryptParameter(String param, String cacheKey);

    /**
     * 解密RSA公钥加密串 - 有模式
     *
     * @param mode     模式
     * @param param    RSA公钥加密后的字符串
     * @param cacheKey Redis中私钥KEY
     * @return
     */
    String decryptParameter(String mode, String param, String cacheKey);

    /**
     * 对已进行RSA加密的密码进行解密
     *
     * @param accoPass   加密的密码
     * @param privateKey RedisConsts中非对称加密私钥设置+UID
     * @param mode       加密模式
     * @return 解密后的密码
     */
    public String rsaDecrypt(String accoPass, String privateKey, String mode);

}
